[新機能]Snowflakeのユーザーに対し「TYPE」propertyを設定できるようになり、外部サービス連携用のユーザーを区別出来るようになりました

[新機能]Snowflakeのユーザーに対し「TYPE」propertyを設定できるようになり、外部サービス連携用のユーザーを区別出来るようになりました

Clock Icon2024.07.19

さがらです。

先日のSnowflake 8.26のリリースノートで、Snowflakeのユーザーに対して「TYPE」propertyが追加されました。

https://docs.snowflake.com/en/release-notes/2024/8_26#new-type-property-for-user-general-availability

この「TYPE」propertyについて、本記事でまとめてみます。

「TYPE」propertyとは

まず、「TYPE」propertyですが、USERオブジェクトに紐づく新しいオプションのプロパティとなります。

https://docs.snowflake.com/en/sql-reference/sql/create-user#label-user-type-property

上記のドキュメントによると、PERSONSERVICELEGACY_SERVICENULLの4つが選択出来るようです。デフォルト値はNULLです。

  • PERSON
    • ユーザーのログイン方法や設定に特に制限はない。(これまでと変わらないSnowflakeユーザーと同じ扱い)
  • NULL
    • PERSONと同じ挙動となる。(これまでと変わらないSnowflakeユーザーと同じ扱い)
  • SERVICE
    • パスワードやSAML SSOを用いて、ログインが不可能となる
    • MFAの設定も不可能であり、authentication policyによるMFAの強制からも除外される
    • FIRST_NAMEMIDDLE_NAMELAST_NAMEPASSWORDMUST_CHANGE_PASSWORDMINS_TO_BYPASS_MFAの設定が不可能
  • LEGACY_SERVICE
    • SERVICEと異なり、パスワードまたはSAML SSOを用いてログインが可能
    • MFAの設定も不可能であり(後述する相樂の検証範囲では)、authentication policyによるMFAの強制からも除外される

この情報を踏まえると、基本的には以下の使い分けが良いと感じました。

  • PERSON
    • 実際にSnowsightにログインして操作する人間に割り当てるユーザー
  • SERVICE
    • dbt CloudやFivetranなどのSnowflake外のサービスからの認証や、自社製のアプリからの認証に使用するユーザー
  • LEGACY_SERVICE
    • パスワード認証しか対応していない外部サービスからの認証に使用するユーザー。authentication policyによるMFAの強制から除外されてしまうがパスワードで認証できるユーザーとなるため、特別な事情がない限りはLEGACY_SERVICEのユーザーは非推奨です

SERVICEユーザーに関する挙動を確かめてみた

TYPEがSERVICEのユーザーに関する挙動を確かめてみます。

まず、以下のようにpasswordも含むcreate userコマンドを実行すると、エラーとなります。これにより、パスワードでの認証が絶対にできないユーザーを作成可能です。

create user sagara_service
    type = service
    password = '<任意のパスワード>'
    default_role = public;

2024-07-19_10h20_19.png

以下のようにpasswordなど、TYPEがSERVICEのときに利用できないオプションを含まないようにすると、無事にユーザーを作ることができます。

create user sagara_service
    type = service
    default_role = public;

2024-07-19_10h23_08.png

Userから確認すると、TYPEは一覧に表示されないようです。対象ユーザーの詳細画面でも、TYPEは確認できませんでした。(個人的にはこのユーザー一覧でも各ユーザーの詳細画面でも、TYPEがわかるようにしてほしいですね)

2024-07-19_10h34_07.png

2024-07-19_10h34_41.png

LEGACY_SERVICEユーザーに関する挙動を確かめてみた

TYPEがLEGACY_SERVICEのユーザーに関する挙動を確かめてみます。

まず、以下のようにpasswordも含むcreate userコマンドを実行すると、SERVICEのときと変わりユーザーの作成ができます。

create user sagara_legacy_service
    type = legacy_service
    password = '<任意のパスワード>'
    default_role = public;

2024-07-19_10h38_25.png

ドキュメント上に明記がなかったMFAの設定がTYPEがLEGACY_SERVICEのユーザーに設定できるかどうかを試してみます。対象のLEGACY_SERVICEのユーザーでログインしてMFAの設定を進めようとすると、MFAの設定の最後でエラーが起きました。私が検証した範囲では、LEGACY_SERVICEのユーザーに対してMFAの設定ができませんでした。

2024-07-19_10h50_54.png

2024-07-19_10h51_15.png

2024-07-19_10h53_27.png

最後に

Snowflakeのユーザーに対し「TYPE」propertyを設定できるようになったので、内容をまとめたうえで動作検証もしてみました。

MFAのポリシーは適用したうえで、外部サービス連携用のユーザーはTYPESERVICEで作るとセキュアなユーザー管理になると思います。ぜひご活用ください!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.